0x608060405234801561001057600080fd5b506140ab806100206000396000f3fe6080604052600436106104355760003560e01c806370d768cc11610229578063b0bc85de1161012e578063d547741f116100b6578063e73370231161007a578063e733702314610cd8578063ea2f0b3714610ced578063ec8a8a7514610d0d578063f35055c314610d2d578063fbde8d7514610d4257600080fd5b8063d547741f14610c28578063d7d2a29f14610c48578063d8454a8214610c5d578063dc1052e214610c72578063dd62ed3e14610c9257600080fd5b8063bddd6263116100fd578063bddd626314610b87578063bff51ef814610ba7578063c0420c5814610bc8578063c46cfdf114610be8578063c49b9a8014610c0857600080fd5b8063b0bc85de14610b1d578063b51ea7ca14610b32578063bd2482c114610b52578063bd7786e814610b7257600080fd5b8063981b751f116101b1578063a26753e111610180578063a26753e114610a7d578063a457c2d714610a9d578063a5ece94114610abd578063a9059cbb14610add578063ad740f8c14610afd57600080fd5b8063981b751f14610a115780639b3957d114610a335780639d6a05c014610a53578063a217fddf14610a6857600080fd5b80638cd09d50116101f85780638cd09d501461097c578063906e9dd01461099c57806391d14854146109bc578063920177d5146109dc57806395d89b41146109fc57600080fd5b806370d768cc14610911578063733b864f14610932578063783478ad146109475780638129fc1c1461096757600080fd5b8063313ce5671161033a57806349bd5a5e116102c2578063638b1b1411610286578063638b1b14146108665780636c18ccc7146108865780636e1e62e2146108a6578063704b5ec9146108bb57806370a08231146108db57600080fd5b806349bd5a5e146107b75780634a74bb02146107d75780635342acb4146107f857806361be0e311461083157806362244b341461084657600080fd5b806341cb87fc1161030957806341cb87fc1461070957806342966c681461072957806342c919ac14610749578063437823ec1461078257806348aea39d146107a257600080fd5b8063313ce5671461068d57806336568abe146106a957806339509351146106c95780633a591fc0146106e957600080fd5b80631694505e116103bd57806323b872dd1161038c57806323b872dd146105e8578063248a9ca314610608578063252d723a1461063857806329b1c15c1461064d5780632f2ff15d1461066d57600080fd5b80631694505e1461056857806316c66c1e146105a057806318160ddd146105c057806319b48b51146105d557600080fd5b806309b907371161040457806309b90737146104db5780630d032d24146104f05780630d1b6feb146105125780630f3d9c9f14610533578063126b10781461054857600080fd5b806301ffc9a714610441578063045e4bfd1461047657806306fdde0314610499578063095ea7b3146104bb57600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5061046161045c366004613878565b610d62565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b5061048b610d99565b60405190815260200161046d565b3480156104a557600080fd5b506104ae610dbb565b60405161046d91906138c6565b3480156104c757600080fd5b506104616104d636600461390e565b610e4d565b3480156104e757600080fd5b5060125461048b565b3480156104fc57600080fd5b5061051061050b36600461393a565b610e63565b005b34801561051e57600080fd5b50601a5461046190600160a01b900460ff1681565b34801561053f57600080fd5b50610510610ea0565b34801561055457600080fd5b50610510610563366004613957565b610ec3565b34801561057457600080fd5b50601954610588906001600160a01b031681565b6040516001600160a01b03909116815260200161046d565b3480156105ac57600080fd5b506105106105bb366004613957565b610ee1565b3480156105cc57600080fd5b5060065461048b565b6105106105e3366004613957565b610fb1565b3480156105f457600080fd5b50610461610603366004613970565b611145565b34801561061457600080fd5b5061048b610623366004613957565b60009081526020819052604090206001015490565b34801561064457600080fd5b50600c5461048b565b34801561065957600080fd5b5061051061066836600461393a565b6111ae565b34801561067957600080fd5b506105106106883660046139b1565b611242565b34801561069957600080fd5b506040516009815260200161046d565b3480156106b557600080fd5b506105106106c43660046139b1565b6112f1565b3480156106d557600080fd5b506104616106e436600461390e565b61136b565b3480156106f557600080fd5b506105106107043660046139e1565b6113a1565b34801561071557600080fd5b5061051061072436600461393a565b6113d8565b34801561073557600080fd5b50610510610744366004613957565b6113f9565b34801561075557600080fd5b5061046161076436600461393a565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561078e57600080fd5b5061051061079d36600461393a565b6114ad565b3480156107ae57600080fd5b5060075461048b565b3480156107c357600080fd5b50601a54610588906001600160a01b031681565b3480156107e357600080fd5b50601a5461046190600160b81b900460ff1681565b34801561080457600080fd5b5061046161081336600461393a565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561083d57600080fd5b5061048b6114ea565b34801561085257600080fd5b50610510610861366004613957565b61150c565b34801561087257600080fd5b50601854610588906001600160a01b031681565b34801561089257600080fd5b506105106108a136600461393a565b6115bc565b3480156108b257600080fd5b5061048b6115f6565b3480156108c757600080fd5b506105106108d6366004613957565b611618565b3480156108e757600080fd5b5061048b6108f636600461393a565b6001600160a01b031660009081526001602052604090205490565b34801561091d57600080fd5b50601a5461046190600160c01b900460ff1681565b34801561093e57600080fd5b50610510611683565b34801561095357600080fd5b50601754610588906001600160a01b031681565b34801561097357600080fd5b50610510611704565b34801561098857600080fd5b50610510610997366004613957565b611976565b3480156109a857600080fd5b506105106109b736600461393a565b6119e5565b3480156109c857600080fd5b506104616109d73660046139b1565b611a6c565b3480156109e857600080fd5b506105106109f7366004613957565b611a95565b348015610a0857600080fd5b506104ae611afa565b348015610a1d57600080fd5b5061048b600080516020613fc983398151915281565b348015610a3f57600080fd5b5061048b610a4e366004613957565b611b09565b348015610a5f57600080fd5b5061048b611b14565b348015610a7457600080fd5b5061048b600081565b348015610a8957600080fd5b50610510610a98366004613957565b611b36565b348015610aa957600080fd5b50610461610ab836600461390e565b611b9a565b348015610ac957600080fd5b50601654610588906001600160a01b031681565b348015610ae957600080fd5b50610461610af836600461390e565b611be9565b348015610b0957600080fd5b50610510610b1836600461393a565b611bf6565b348015610b2957600080fd5b50600d5461048b565b348015610b3e57600080fd5b50610510610b4d366004613957565b611c7d565b348015610b5e57600080fd5b50610510610b6d366004613957565b611ce2565b348015610b7e57600080fd5b5061048b611d00565b348015610b9357600080fd5b50610510610ba2366004613a03565b611d22565b348015610bb357600080fd5b50601a5461046190600160c81b900460ff1681565b348015610bd457600080fd5b50610510610be3366004613957565b611d45565b348015610bf457600080fd5b5061048b610c03366004613957565b611daa565b348015610c1457600080fd5b50610510610c233660046139e1565b611db5565b348015610c3457600080fd5b50610510610c433660046139b1565b611e26565b348015610c5457600080fd5b5061048b611e4b565b348015610c6957600080fd5b5061048b611e6d565b348015610c7e57600080fd5b50610510610c8d366004613957565b611eb7565b348015610c9e57600080fd5b5061048b610cad366004613a4e565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610ce457600080fd5b5060135461048b565b348015610cf957600080fd5b50610510610d0836600461393a565b611f26565b348015610d1957600080fd5b50610510610d28366004613957565b611f60565b348015610d3957600080fd5b50610510611f7e565b348015610d4e57600080fd5b50610510610d5d366004613957565b612022565b60006001600160e01b03198216637965db0b60e01b1480610d9357506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000600080516020613fc9833981519152610db38161213b565b505060145490565b606060048054610dca90613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610df690613a7c565b8015610e435780601f10610e1857610100808354040283529160200191610e43565b820191906000526020600020905b815481529060010190602001808311610e2657829003601f168201915b5050505050905090565b6000610e5a338484612145565b50600192915050565b600080516020613fc9833981519152610e7b8161213b565b506001600160a01b03166000908152601b60205260409020805460ff19166001179055565b600080516020613fc9833981519152610eb88161213b565b610ec061226a565b50565b600080516020613fc9833981519152610edb8161213b565b50601355565b600080516020613fc9833981519152610ef98161213b565b601a54600160a81b900460ff16158015610f1d5750601a54600160b01b900460ff16155b15610fad57600754306000908152600160205260408120549091610f42915b906123e8565b905082811015610f8a5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064015b60405180910390fd5b6000610f9584612431565b90506012548110610faa57610faa84826125ae565b50505b5050565b6000610fbc336108f6565b90508181101561100e5760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e63650000000000006044820152606401610f81565b6110388260016000335b6001600160a01b03168152602081019190915260400160002054906123e8565b3360009081526001602052604080822092909255308152205461105b90836125f2565b30600081815260016020526040902091909155336001600160a01b03166000805160206140118339815191528460405161109791815260200190565b60405180910390a36019546110b79030906001600160a01b031684612145565b6019546001600160a01b031663f305d7193430858083336110da42610258613acc565b6040518863ffffffff1660e01b81526004016110fb96959493929190613adf565b60606040518083038185885af1158015611119573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061113e9190613b1a565b5050505050565b6000611152848484612651565b6111a4843361119f85604051806060016040528060288152602001613fe9602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906129e5565b612145565b5060019392505050565b600080516020613fc98339815191526111c68161213b565b601880546001600160a01b038481166001600160a01b0319831681178455600090815260036020526040808220805460ff199081166001179091559383168083529181902080549094169093559254915160008051602061403183398151915292611235928592911690613b48565b60405180910390a1505050565b60008281526020819052604090206001015461125d8161213b565b7f9b16e739717bfbc9d7e8738b0f6e159be5b92c58c66b27f95f1214749760d0d783036112e257611296826001600160a01b0316612a1f565b6112e25760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964206164647265737320666f72204d494e545f415554480000006044820152606401610f81565b6112ec8383612a5b565b505050565b6001600160a01b03811633146113615760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610f81565b610fad8282612adf565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610e5a91859061119f90866125f2565b600080516020613fc98339815191526113b98161213b565b50601a8054911515600160c01b0260ff60c01b19909216919091179055565b600080516020613fc98339815191526113f08161213b565b610fad82612b44565b80611403336108f6565b10156114485760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610f81565b611456816001600033611018565b3360009081526001602052604090205560065461147390826123e8565b6006556000335b6001600160a01b0316600080516020614011833981519152836040516114a291815260200190565b60405180910390a350565b600080516020613fc98339815191526114c58161213b565b506001600160a01b03166000908152600360205260409020805460ff19166001179055565b6000600080516020613fc98339815191526115048161213b565b505060105490565b80611516336108f6565b101561155b5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610f81565b611569816001600033611018565b3360009081526001602052604090205560075461158690826125f2565b600755306000908152600160205260409020546115a390826125f2565b306000818152600160205260409020919091553361147a565b600080516020613fc98339815191526115d48161213b565b506001600160a01b03166000908152601b60205260409020805460ff19169055565b6000600080516020613fc98339815191526116108161213b565b505060115490565b600080516020613fc98339815191526116308161213b565b6000611659600b54611653600954611653600854886125f290919063ffffffff16565b906125f2565b9050606481111561167c5760405162461bcd60e51b8152600401610f8190613b85565b5050600a55565b600080516020613fc983398151915261169b8161213b565b601a54600160a81b900460ff161580156116bf5750601a54600160b01b900460ff16155b15610ec0576007543060009081526001602052604081205490916116e291610f3c565b905060006116ef82612431565b905060125481106112ec576112ec82826125ae565b600080516020613fc983398151915260009081526020527fcca4d96d6675e87fcb376c8c56a0b480d48f7f2cad1feeb2458c610f1151521354156117795760405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59081a5b9a5d60a21b6044820152606401610f81565b611791600080516020613fc983398151915233612deb565b6117a9600080516020613fc983398151915280612df5565b604080518082019091526008815267115b1bdb91dbd85d60c21b60208201526004906117d59082613c2a565b506040805180820190915260038152621151d560ea1b60208201526005906117fd9082613c2a565b50677ce66c50e2840000600681905566470de4df8200006007818155602860085560146009819055600a819055600b8190556064600c5560c8600d55660aa87bee538000601255662386f26fc1000060135555606e601555601a805465ffffff0000ff60a01b19166201010160b81b17905560009161187b916123e8565b33600081815260016020818152604080842086905560075430808652828620919091559484526003909152808320805460ff199081168417909155938352909120805490921617905590506118e3737a250d5630b4cf539739df2c5dacb4c659f2488d612b44565b61192a734cc2b3336692e1ef68fa2381eb8c7ffa73b8f6047370fbfba38623259c02167691b988235fbf40cc2873c0f4f07d5c1619d0237e2231703c30822a04e29c612e40565b60405181815233906000906000805160206140118339815191529060200160405180910390a36007546040519081523090600090600080516020614011833981519152906020016114a2565b600080516020613fc983398151915261198e8161213b565b60fa8211156119df5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206665657320686967686572207468616e20323525216044820152606401610f81565b50600d55565b600080516020613fc98339815191526119fd8161213b565b601680546001600160a01b038481166001600160a01b0319831681178455600090815260036020526040808220805460ff199081166001179091559383168083529181902080549094169093559254915160008051602061403183398151915292611235928592911690613cea565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020613fc9833981519152611aad8161213b565b6000611ad0600b54611653600a54611653600854886125f290919063ffffffff16565b90506064811115611af35760405162461bcd60e51b8152600401610f8190613b85565b5050600855565b606060058054610dca90613a7c565b6000610d9382612431565b6000600080516020613fc9833981519152611b2e8161213b565b5050600f5490565b600080516020613fc9833981519152611b4e8161213b565b6009821115611b945760405162461bcd60e51b815260206004820152601260248201527143616e6e6f74207365742061626f7665203960701b6044820152606401610f81565b50601455565b6000610e5a338461119f85604051806060016040528060258152602001614051602591393360009081526002602090815260408083206001600160a01b038d16845290915290205491906129e5565b6000610e5a338484612651565b600080516020613fc9833981519152611c0e8161213b565b601780546001600160a01b038481166001600160a01b0319831681178455600090815260036020526040808220805460ff199081166001179091559383168083529181902080549094169093559254915160008051602061403183398151915292611235928592911690613d25565b600080516020613fc9833981519152611c958161213b565b6000611cb8600b54611653600a54611653600954886125f290919063ffffffff16565b90506064811115611cdb5760405162461bcd60e51b8152600401610f8190613b85565b5050600955565b600080516020613fc9833981519152611cfa8161213b565b50601255565b6000600080516020613fc9833981519152611d1a8161213b565b505060155490565b600080516020613fc9833981519152611d3a8161213b565b610faa848484612e40565b600080516020613fc9833981519152611d5d8161213b565b6000611d80600a54611653600954611653600854886125f290919063ffffffff16565b90506064811115611da35760405162461bcd60e51b8152600401610f8190613b85565b5050600b55565b6000610d9382612f87565b600080516020613fc9833981519152611dcd8161213b565b601a8054831515600160b81b0260ff60b81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611e1a90841515815260200190565b60405180910390a15050565b600082815260208190526040902060010154611e418161213b565b6112ec8383612adf565b6000600080516020613fc9833981519152611e658161213b565b5050600e5490565b6000600080516020613fc9833981519152611e878161213b565b601154600f54601054600e54611e9d9190613acc565b611ea79190613acc565b611eb19190613acc565b91505090565b600080516020613fc9833981519152611ecf8161213b565b60fa821115611f205760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f7420736574206665657320686967686572207468616e20323525216044820152606401610f81565b50600c55565b600080516020613fc9833981519152611f3e8161213b565b506001600160a01b03166000908152600360205260409020805460ff19169055565b600080516020613fc9833981519152611f788161213b565b50601555565b600080516020613fc9833981519152611f968161213b565b601a54600160a01b900460ff1615611fe35760405162461bcd60e51b815260206004820152601060248201526f416c726561647920656e61626c65642160801b6044820152606401610f81565b601a805460ff60a01b1916600160a01b1790556040517f9ad2c598bcb92ad4e799fec1c3f2c39fb4e7554d3c1a7134838f3dd7587181a090600090a150565b600080516020613fc983398151915261203a8161213b565b601a54600160a81b900460ff1615801561205e5750601a54600160b01b900460ff16155b6120985760405162461bcd60e51b815260206004820152600b60248201526a0496e206175746f737761760ac1b6044820152606401610f81565b30600090815260016020526040902054808311156120ee5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081d1bdad95b985b5bdd5b9d606a1b6044820152606401610f81565b6000612105600754836123e890919063ffffffff16565b90508084111561213057600061211b85836123e8565b60075490915061212b90826123e8565b600755505b610faa3033866130f4565b610ec08133613188565b6001600160a01b0383166121a75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610f81565b6001600160a01b0382166122085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610f81565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b601a805460ff60b01b1916600160b01b179055600854479060009061229d906064906122979085906131ec565b9061326e565b905060006122bb6064612297600954866131ec90919063ffffffff16565b905060006122d96064612297600b54876131ec90919063ffffffff16565b905060006122ed82610f3c858189896123e8565b905060008061230c606461229760155461230688612f87565b906131ec565b90508060075410156123295761232283856125f2565b9250612360565b61233384826132b0565b91508161234f5761234483856125f2565b925060019150612360565b60115461235c90856125f2565b6011555b601654612376906001600160a01b0316876132fa565b60175461238c906001600160a01b0316866132fa565b6018546123a2906001600160a01b0316846132fa565b600e546123af90876125f2565b600e55600f546123bf90866125f2565b600f556010546123cf90846125f2565b6010555050601a805460ff60b01b191690555050505050565b600061242a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129e5565b9392505050565b60008160000361244357506000919050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061247857612478613d5e565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156124d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f59190613d74565b8160018151811061250857612508613d5e565b6001600160a01b03928316602091820292909201015260195460405163d06ca61f60e01b815291169063d06ca61f906125479086908590600401613dd5565b600060405180830381865afa158015612564573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261258c9190810190613dee565b60018151811061259e5761259e613d5e565b6020026020010151915050919050565b601a805460ff60a81b1916600160a81b1790556014546125e19083906125dc90600a906122979086906131ec565b613392565b5050601a805460ff60a81b19169055565b6000806125ff8385613acc565b90508381101561242a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610f81565b6001600160a01b0383166126b55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610f81565b6001600160a01b0382166127175760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610f81565b6001600160a01b0383166000908152601b602052604090205460ff1615801561275957506001600160a01b0382166000908152601b602052604090205460ff16155b6127b15760405162461bcd60e51b8152602060048201526024808201527f496e76616c6964206163636f756e74202d20636f6e74616374204547542061646044820152636d696e2160e01b6064820152608401610f81565b806000036127ed57816001600160a01b0316836001600160a01b0316600080516020614011833981519152600060405161225d91815260200190565b601a54600160c81b900460ff16158061281e57506001600160a01b03831660009081526003602052604090205460ff165b8061284157506001600160a01b03821660009081526003602052604090205460ff165b15612851576112ec8383836130f4565b601a546001600160a01b03908116838216811491851614811582612873575080155b156128835761113e8585856130f4565b601a54600160a01b900460ff166128dc5760405162461bcd60e51b815260206004820152601760248201527f556e6973776170206e6f7420656e61626c6564207965740000000000000000006044820152606401610f81565b81156129da57601a54600090600160a81b900460ff161580156129095750601a54600160b01b900460ff16155b801561291e5750601a54600160b81b900460ff165b1561296b5760075430600090815260016020526040812054909161294191610f3c565b9050600061294e82612431565b905060125481106129685761296382826125ae565b600192505b50505b801580156129835750601a54600160b01b900460ff16155b80156129995750601a54600160a81b900460ff16155b80156129ae5750601a54600160c01b900460ff165b80156129bc57506013544710155b156129c9576129c961226a565b6129d48686866134ed565b5061113e565b61113e8585856134fb565b60008184841115612a095760405162461bcd60e51b8152600401610f8191906138c6565b506000612a168486613eac565b95945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612a5357508115155b949350505050565b612a658282611a6c565b610fad576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055612a9b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612ae98282611a6c565b15610fad576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bad9190613d74565b90506000816001600160a01b031663e6a4390530856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c239190613d74565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c929190613d74565b90506001600160a01b038116612daa57816001600160a01b031663c9c6539630856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d149190613d74565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612d61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d859190613d74565b601a80546001600160a01b0319166001600160a01b0392909216919091179055612dc6565b601a80546001600160a01b0319166001600160a01b0383161790555b5050601980546001600160a01b0319166001600160a01b039290921691909117905550565b610fad8282612a5b565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6016805460178054601880546001600160a01b038981166001600160a01b0319808816821789558a8316818716178755898316908416178455600090815260036020526040808220805460ff199081166001908117909255975484168352818320805489168217905594548316825280822080548816909517909455958116808752838720805487169055938116808752838720805487169055918116808752958390208054909516909455945490519194939260008051602061403183398151915292612f119287921690613cea565b60405180910390a160175460405160008051602061403183398151915291612f449185916001600160a01b031690613d25565b60405180910390a160185460405160008051602061403183398151915291612f779184916001600160a01b031690613b48565b60405180910390a1505050505050565b600081600003612f9957506000919050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fce57612fce613d5e565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304b9190613d74565b8160018151811061305e5761305e613d5e565b6001600160a01b0392831660209182029290920101526019546040516307c0329d60e21b8152911690631f00ca749061309d9086908590600401613dd5565b600060405180830381865afa1580156130ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130e29190810190613dee565b60008151811061259e5761259e613d5e565b6001600160a01b03831660009081526001602052604090205461311790826123e8565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461314690826125f2565b6001600160a01b0380841660008181526001602052604090819020939093559151908516906000805160206140118339815191529061225d9085815260200190565b6131928282611a6c565b610fad576131aa816001600160a01b03166014613509565b6131b5836020613509565b6040516020016131c6929190613ebf565b60408051601f198184030181529082905262461bcd60e51b8252610f81916004016138c6565b6000826000036131fe57506000610d93565b600061320a8385613f34565b9050826132178583613f53565b1461242a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610f81565b600061242a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136a5565b6000826000036132c257506001610d93565b60006132ce83856136d3565b905080156132f0576007546132e390826123e8565b6007555060019050610d93565b5060009392505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613347576040519150601f19603f3d011682016040523d82523d6000602084013e61334c565b606091505b50509050806112ec5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610f81565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106133c7576133c7613d5e565b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613420573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134449190613d74565b8160018151811061345757613457613d5e565b6001600160a01b03928316602091820292909201015260195461347d9130911685612145565b60195460405163791ac94760e01b81526001600160a01b039091169063791ac947906134b6908690600090869030904290600401613f75565b600060405180830381600087803b1580156134d057600080fd5b505af11580156134e4573d6000803e3d6000fd5b50505050505050565b6112ec838383600d54613780565b6112ec838383600c54613780565b60606000613518836002613f34565b613523906002613acc565b67ffffffffffffffff81111561353b5761353b613bc6565b6040519080825280601f01601f191660200182016040528015613565576020820181803683370190505b509050600360fc1b8160008151811061358057613580613d5e565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106135af576135af613d5e565b60200101906001600160f81b031916908160001a90535060006135d3846002613f34565b6135de906001613acc565b90505b6001811115613656576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061361257613612613d5e565b1a60f81b82828151811061362857613628613d5e565b60200101906001600160f81b031916908160001a90535060049490941c9361364f81613fb1565b90506135e1565b50831561242a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610f81565b600081836136c65760405162461bcd60e51b8152600401610f8191906138c6565b506000612a168486613f53565b6019546000906136ee9030906001600160a01b031685612145565b60195460175460405163f305d71960e01b81526001600160a01b039283169263f305d71992869261372e9230928a92600092839216904290600401613adf565b60606040518083038185885af193505050508015613769575060408051601f3d908101601f1916820190925261376691810190613b1a565b60015b61377557506000610d93565b829350505050610d93565b6001600160a01b0384166000908152600160205260409020546137a390836123e8565b6001600160a01b0385166000908152600160205260408120919091556137cf6103e861229785856131ec565b905060006137dd84836123e8565b306000908152600160205260409020549091506137fa90836125f2565b30600090815260016020526040808220929092556001600160a01b0387168152205461382690826125f2565b6001600160a01b038087166000818152600160205260409081902093909355915190881690600080516020614011833981519152906138689085815260200190565b60405180910390a3505050505050565b60006020828403121561388a57600080fd5b81356001600160e01b03198116811461242a57600080fd5b60005b838110156138bd5781810151838201526020016138a5565b50506000910152565b60208152600082518060208401526138e58160408501602087016138a2565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610ec057600080fd5b6000806040838503121561392157600080fd5b823561392c816138f9565b946020939093013593505050565b60006020828403121561394c57600080fd5b813561242a816138f9565b60006020828403121561396957600080fd5b5035919050565b60008060006060848603121561398557600080fd5b8335613990816138f9565b925060208401356139a0816138f9565b929592945050506040919091013590565b600080604083850312156139c457600080fd5b8235915060208301356139d6816138f9565b809150509250929050565b6000602082840312156139f357600080fd5b8135801515811461242a57600080fd5b600080600060608486031215613a1857600080fd5b8335613a23816138f9565b92506020840135613a33816138f9565b91506040840135613a43816138f9565b809150509250925092565b60008060408385031215613a6157600080fd5b8235613a6c816138f9565b915060208301356139d6816138f9565b600181811c90821680613a9057607f821691505b602082108103613ab057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610d9357610d93613ab6565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613b2f57600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b03928316815291166020820152606060408201819052600b908201526a19195d995b1bdc1b595b9d60aa1b608082015260a00190565b60208082526021908201527f43616e6e6f742073657420736861726520686967686572207468616e203130306040820152602560f81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b601f8211156112ec57600081815260208120601f850160051c81016020861015613c035750805b601f850160051c820191505b81811015613c2257828155600101613c0f565b505050505050565b815167ffffffffffffffff811115613c4457613c44613bc6565b613c5881613c528454613a7c565b84613bdc565b602080601f831160018114613c8d5760008415613c755750858301515b600019600386901b1c1916600185901b178555613c22565b600085815260208120601f198616915b82811015613cbc57888601518255948401946001909101908401613c9d565b5085821015613cda5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b03928316815291166020820152606060408201819052600990820152686d61726b6574696e6760b81b608082015260a00190565b6001600160a01b03928316815291166020820152606060408201819052600790820152666275794261636b60c81b608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613d8657600080fd5b815161242a816138f9565b600081518084526020808501945080840160005b83811015613dca5781516001600160a01b031687529582019590820190600101613da5565b509495945050505050565b828152604060208201526000612a536040830184613d91565b60006020808385031215613e0157600080fd5b825167ffffffffffffffff80821115613e1957600080fd5b818501915085601f830112613e2d57600080fd5b815181811115613e3f57613e3f613bc6565b8060051b604051601f19603f83011681018181108582111715613e6457613e64613bc6565b604052918252848201925083810185019188831115613e8257600080fd5b938501935b82851015613ea057845184529385019392850192613e87565b98975050505050505050565b81810381811115610d9357610d93613ab6565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613ef78160178501602088016138a2565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613f288160288401602088016138a2565b01602801949350505050565b6000816000190483118215151615613f4e57613f4e613ab6565b500290565b600082613f7057634e487b7160e01b600052601260045260246000fd5b500490565b85815284602082015260a060408201526000613f9460a0830186613d91565b6001600160a01b0394909416606083015250608001529392505050565b600081613fc057613fc0613ab6565b50600019019056fe79417455563f87f8ccd000c5e6526d6173927e2680d0205efe3066a95120a50545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef887b60eeb739c5bafd6fb91252e90ed0ab7744b0cfb29af5b58a41abc3ba6b1945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220f427d5e567ce72e7a73d230dddf42ac65a5f09197bc22fe00fbbb258e275c08564736f6c63430008100033